package com.kevinkk.greedy;

/**
 * 如果连续数字之间的差严格地在正数和负数之间交替，则数字序列称为 摆动序列 。
 * 第一个差（如果存在的话）可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。
 * 子序列 可以通过从原始序列中删除一些（也可以不删除）元素来获得，剩下的元素保持其原始顺序。
 * 给你一个整数数组 nums ，返回 nums 中作为 摆动序列 的 最长子序列的长度 。
 */

public class WiggleSubsequence {
    class Solution {
        public int wiggleMaxLength(int[] nums) {
            int curDif = 0; // 表示当前元素和后一个元素之差
            int preDif = 0; // 表示当前元素和前一个元素之差
            int res = 1;    // 默认为1，处理首个元素的情况
            for (int i = 0; i < nums.length - 1; i++) {
                curDif = nums[i + 1] - nums[i];
                // preDif == 0 指的是首个元素的情况
                if (preDif <= 0 && curDif > 0 || preDif >= 0 && curDif < 0) {
                    res++;
                    preDif = curDif;    // 只有有坡度变化了，才更新 preDif
                }
            }
            return res;
        }
    }
}
